/********************************************************************** 
 * FILE		: NumberUtilTools.java					
 *			
 * AUTHOR   : kloyf		
 * 
 * DATE		: 2011-7-18
 * 									
 * REASON	: CREATE  
 *            							
 * VERSION  ：0.0.1
 *
 ***********************************************************************/
package com.common.util.number;

/**
 * 数字工具类
 * 
 * @author kloyf
 * @version 0.0.1
 */
public class NumberUtilTools extends AbstractNumberUtil {
	/**
	 * 加法计算
	 * 
	 * @param a
	 * @param b
	 * @return long 返回加法计算结果
	 */
	public static long sum(long a, long b) {
		return a + b;
	}

	/**
	 * 减法计算
	 * 
	 * @param a
	 * @param b
	 * @return long 返回减法计算结果
	 */
	public static long difference(long a, long b) {
		return a - b;
	}

	/**
	 * 乘法计算
	 * 
	 * @param a
	 * @param b
	 * @return long 返回乘法计算 结果
	 */
	public static long multiply(long a, long b) {
		if (a == 0 || b == 0) {
			return 0;
		}
		return a * b;
	}

	/**
	 * 除法计算
	 * 
	 * @param a
	 *            被除数
	 * @param b
	 *            除数。除数不能为0，否则直接返回0.
	 * @return double 返回除法计算结果
	 */
	public static double division(long a, long b) {
		if (b == 0) {
			return b;
		} else {
			return (double) a / b;
		}
	}

	/**
	 * 取余数计算
	 * 
	 * @param a
	 *            被除数
	 * @param b
	 *            除数。除数不能为0，否则直接返回0.
	 * @return long 返回除法余数结果
	 */
	public static long mod(long a, long b) {
		if (b == 0) {
			return b;
		} else {
			return a % b;
		}
	}

	/**
	 * 功能描述：判断是否为质数
	 * 
	 * @param x
	 *            需要判断的数字
	 * @return boolean 返回判断结果。如果为质数，返回为true，否则为false。
	 */
	public static boolean isPrime(int x) {
		if (x <= 7) {
			if (x == 2 || x == 3 || x == 5 || x == 7)
				return true;
		}
		int c = 7;
		if (mod(x, 2) == 0)
			return false;
		if (mod(x, 3) == 0)
			return false;
		if (mod(x, 5) == 0)
			return false;
		int end = (int) Math.sqrt(x);
		while (c <= end) {
			if (mod(x, c) == 0) {
				return false;
			}
			c += 4;
			if (mod(x, c) == 0) {
				return false;
			}
			c += 2;
			if (mod(x, c) == 0) {
				return false;
			}
			c += 4;
			if (mod(x, c) == 0) {
				return false;
			}
			c += 2;
			if (mod(x, c) == 0) {
				return false;
			}
			c += 4;
			if (mod(x, c) == 0) {
				return false;
			}
			c += 6;
			if (mod(x, c) == 0) {
				return false;
			}
			c += 2;
			if (mod(x, c) == 0) {
				return false;
			}
			c += 6;
		}
		return true;
	}
}
